libminradio: Add API to track SIM filesystem changes

Bug: 310710841
Test: VtsHalRadioTargetTest
Change-Id: I3f509b41752a382bb928a63338bc171f633acd24
diff --git a/radio/aidl/minradio/libminradio/include/libminradio/sim/Filesystem.h b/radio/aidl/minradio/libminradio/include/libminradio/sim/Filesystem.h
index 489d59b..4e7c5ee 100644
--- a/radio/aidl/minradio/libminradio/include/libminradio/sim/Filesystem.h
+++ b/radio/aidl/minradio/libminradio/include/libminradio/sim/Filesystem.h
@@ -19,6 +19,7 @@
 #include <android-base/thread_annotations.h>
 
 #include <map>
+#include <set>
 #include <span>
 
 namespace android::hardware::radio::minimal::sim {
@@ -38,6 +39,7 @@
   private:
     mutable std::mutex mFilesGuard;
     std::map<Path, std::vector<uint8_t>> mFiles GUARDED_BY(mFilesGuard);
+    std::set<int32_t> mUpdates GUARDED_BY(mFilesGuard);
 
     DISALLOW_COPY_AND_ASSIGN(Filesystem);
 
@@ -53,6 +55,8 @@
     std::optional<std::string> readBch(const Path& path) const;
 
     std::optional<Path> find(uint16_t fileId);
+
+    std::set<int32_t> fetchAndClearUpdates();
 };
 
 namespace paths {
diff --git a/radio/aidl/minradio/libminradio/sim/Filesystem.cpp b/radio/aidl/minradio/libminradio/sim/Filesystem.cpp
index 65c92b1..4be63f4 100644
--- a/radio/aidl/minradio/libminradio/sim/Filesystem.cpp
+++ b/radio/aidl/minradio/libminradio/sim/Filesystem.cpp
@@ -47,11 +47,13 @@
 void Filesystem::write(const Path& path, FileView contents) {
     std::unique_lock lck(mFilesGuard);
     mFiles[path].assign(contents.begin(), contents.end());  // C++23: assign_range
+    mUpdates.insert(path.fileId);
 }
 
 void Filesystem::write(const Path& path, std::string_view contents) {
     std::unique_lock lck(mFilesGuard);
     mFiles[path].assign(contents.begin(), contents.end());  // C++23: assign_range
+    mUpdates.insert(path.fileId);
 }
 
 void Filesystem::write(const Path& path, std::vector<uint8_t>&& contents) {
@@ -84,6 +86,13 @@
     return std::nullopt;
 }
 
+std::set<int32_t> Filesystem::fetchAndClearUpdates() {
+    std::unique_lock lck(mFilesGuard);
+    std::set<int32_t> result;
+    std::swap(result, mUpdates);
+    return result;
+}
+
 std::string Filesystem::Path::toString() const {
     return std::format("{:s}/{:X}", pathId, fileId);
 }