incidentd can now handle multiple callers asking it for incident reports

Test: bit incident_test:* GtsIncidentManagerTestCases:*
Bug: 123543706
Change-Id: I9f671dd5d8b2ad139f952a23e575c2be16120459
diff --git a/cmds/statsd/Android.bp b/cmds/statsd/Android.bp
index ce07d6d..8cd409e 100644
--- a/cmds/statsd/Android.bp
+++ b/cmds/statsd/Android.bp
@@ -118,6 +118,7 @@
 
     static_libs: [
         "libhealthhalutils",
+        "libplatformprotos",
     ],
 
     shared_libs: [
diff --git a/cmds/statsd/src/StatsLogProcessor.cpp b/cmds/statsd/src/StatsLogProcessor.cpp
index a6699e7..286e76e 100644
--- a/cmds/statsd/src/StatsLogProcessor.cpp
+++ b/cmds/statsd/src/StatsLogProcessor.cpp
@@ -407,12 +407,12 @@
         outData->clear();
         outData->resize(proto.size());
         size_t pos = 0;
-        auto iter = proto.data();
-        while (iter.readBuffer() != NULL) {
-            size_t toRead = iter.currentToRead();
-            std::memcpy(&((*outData)[pos]), iter.readBuffer(), toRead);
+        sp<android::util::ProtoReader> reader = proto.data();
+        while (reader->readBuffer() != NULL) {
+            size_t toRead = reader->currentToRead();
+            std::memcpy(&((*outData)[pos]), reader->readBuffer(), toRead);
             pos += toRead;
-            iter.rp()->move(toRead);
+            reader->move(toRead);
         }
     }
 
diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp
index f78ae38..52ecdc8 100644
--- a/cmds/statsd/src/StatsService.cpp
+++ b/cmds/statsd/src/StatsService.cpp
@@ -50,6 +50,7 @@
 using android::util::FIELD_COUNT_REPEATED;
 using android::util::FIELD_TYPE_INT64;
 using android::util::FIELD_TYPE_MESSAGE;
+using android::util::ProtoReader;
 
 namespace android {
 namespace os {
@@ -1220,12 +1221,12 @@
 
         experimentIdsProtoBuffer.resize(proto.size());
         size_t pos = 0;
-        auto iter = proto.data();
-        while (iter.readBuffer() != NULL) {
-            size_t toRead = iter.currentToRead();
-            std::memcpy(&(experimentIdsProtoBuffer[pos]), iter.readBuffer(), toRead);
+        sp<ProtoReader> reader = proto.data();
+        while (reader->readBuffer() != NULL) {
+            size_t toRead = reader->currentToRead();
+            std::memcpy(&(experimentIdsProtoBuffer[pos]), reader->readBuffer(), toRead);
             pos += toRead;
-            iter.rp()->move(toRead);
+            reader->move(toRead);
         }
     }
 
diff --git a/cmds/statsd/src/external/GpuStatsPuller.cpp b/cmds/statsd/src/external/GpuStatsPuller.cpp
index 130bd85..3fa932f 100644
--- a/cmds/statsd/src/external/GpuStatsPuller.cpp
+++ b/cmds/statsd/src/external/GpuStatsPuller.cpp
@@ -29,6 +29,8 @@
 namespace os {
 namespace statsd {
 
+using android::util::ProtoReader;
+
 GpuStatsPuller::GpuStatsPuller(const int tagId) : StatsPuller(tagId) {
 }
 
@@ -116,11 +118,11 @@
     if (!proto.size()) return "";
 
     std::string byteString;
-    auto iter = proto.data();
-    while (iter.readBuffer() != nullptr) {
-        const size_t toRead = iter.currentToRead();
-        byteString.append((char*)iter.readBuffer(), toRead);
-        iter.rp()->move(toRead);
+    sp<ProtoReader> reader = proto.data();
+    while (reader->readBuffer() != nullptr) {
+        const size_t toRead = reader->currentToRead();
+        byteString.append((char*)reader->readBuffer(), toRead);
+        reader->move(toRead);
     }
 
     if (byteString.size() != proto.size()) return "";
diff --git a/cmds/statsd/src/guardrail/StatsdStats.cpp b/cmds/statsd/src/guardrail/StatsdStats.cpp
index 9a00637..24408fc 100644
--- a/cmds/statsd/src/guardrail/StatsdStats.cpp
+++ b/cmds/statsd/src/guardrail/StatsdStats.cpp
@@ -904,12 +904,12 @@
     output->resize(bufferSize);
 
     size_t pos = 0;
-    auto it = proto.data();
-    while (it.readBuffer() != NULL) {
-        size_t toRead = it.currentToRead();
-        std::memcpy(&((*output)[pos]), it.readBuffer(), toRead);
+    sp<android::util::ProtoReader> reader = proto.data();
+    while (reader->readBuffer() != NULL) {
+        size_t toRead = reader->currentToRead();
+        std::memcpy(&((*output)[pos]), reader->readBuffer(), toRead);
         pos += toRead;
-        it.rp()->move(toRead);
+        reader->move(toRead);
     }
 
     if (reset) {
diff --git a/cmds/statsd/src/metrics/EventMetricProducer.cpp b/cmds/statsd/src/metrics/EventMetricProducer.cpp
index 5435c84..69816cb 100644
--- a/cmds/statsd/src/metrics/EventMetricProducer.cpp
+++ b/cmds/statsd/src/metrics/EventMetricProducer.cpp
@@ -90,12 +90,12 @@
     std::unique_ptr<std::vector<uint8_t>> buffer(new std::vector<uint8_t>(bufferSize));
 
     size_t pos = 0;
-    auto it = protoOutput.data();
-    while (it.readBuffer() != NULL) {
-        size_t toRead = it.currentToRead();
-        std::memcpy(&((*buffer)[pos]), it.readBuffer(), toRead);
+    sp<android::util::ProtoReader> reader = protoOutput.data();
+    while (reader->readBuffer() != NULL) {
+        size_t toRead = reader->currentToRead();
+        std::memcpy(&((*buffer)[pos]), reader->readBuffer(), toRead);
         pos += toRead;
-        it.rp()->move(toRead);
+        reader->move(toRead);
     }
 
     return buffer;
diff --git a/cmds/statsd/src/stats_log_util.h b/cmds/statsd/src/stats_log_util.h
index 59d4865..cdef874 100644
--- a/cmds/statsd/src/stats_log_util.h
+++ b/cmds/statsd/src/stats_log_util.h
@@ -80,11 +80,11 @@
 template<class T>
 bool parseProtoOutputStream(util::ProtoOutputStream& protoOutput, T* message) {
     std::string pbBytes;
-    auto iter = protoOutput.data();
-    while (iter.readBuffer() != NULL) {
-        size_t toRead = iter.currentToRead();
-         pbBytes.append(reinterpret_cast<const char*>(iter.readBuffer()), toRead);
-        iter.rp()->move(toRead);
+    sp<android::util::ProtoReader> reader = protoOutput.data();
+    while (reader->readBuffer() != NULL) {
+        size_t toRead = reader->currentToRead();
+         pbBytes.append(reinterpret_cast<const char*>(reader->readBuffer()), toRead);
+        reader->move(toRead);
     }
     return message->ParseFromArray(pbBytes.c_str(), pbBytes.size());
 }
diff --git a/cmds/statsd/src/subscriber/IncidentdReporter.cpp b/cmds/statsd/src/subscriber/IncidentdReporter.cpp
index 7c2d242..ff1cb4f 100644
--- a/cmds/statsd/src/subscriber/IncidentdReporter.cpp
+++ b/cmds/statsd/src/subscriber/IncidentdReporter.cpp
@@ -120,12 +120,12 @@
 
     protoData->resize(headerProto.size());
     size_t pos = 0;
-    auto iter = headerProto.data();
-    while (iter.readBuffer() != NULL) {
-        size_t toRead = iter.currentToRead();
-        std::memcpy(&((*protoData)[pos]), iter.readBuffer(), toRead);
+    sp<android::util::ProtoReader> reader = headerProto.data();
+    while (reader->readBuffer() != NULL) {
+        size_t toRead = reader->currentToRead();
+        std::memcpy(&((*protoData)[pos]), reader->readBuffer(), toRead);
         pos += toRead;
-        iter.rp()->move(toRead);
+        reader->move(toRead);
     }
 }
 }  // namespace
@@ -152,15 +152,15 @@
     uint8_t dest;
     switch (config.dest()) {
         case IncidentdDetails_Destination_AUTOMATIC:
-            dest = android::os::DEST_AUTOMATIC;
+            dest = android::os::PRIVACY_POLICY_AUTOMATIC;
             break;
         case IncidentdDetails_Destination_EXPLICIT:
-            dest = android::os::DEST_EXPLICIT;
+            dest = android::os::PRIVACY_POLICY_EXPLICIT;
             break;
         default:
-            dest = android::os::DEST_AUTOMATIC;
+            dest = android::os::PRIVACY_POLICY_AUTOMATIC;
     }
-    incidentReport.setDest(dest);
+    incidentReport.setPrivacyPolicy(dest);
 
     incidentReport.setReceiverPkg(config.receiver_pkg());
 
diff --git a/cmds/statsd/tests/FieldValue_test.cpp b/cmds/statsd/tests/FieldValue_test.cpp
index a9305ac..f1cad92 100644
--- a/cmds/statsd/tests/FieldValue_test.cpp
+++ b/cmds/statsd/tests/FieldValue_test.cpp
@@ -24,6 +24,8 @@
 
 #ifdef __ANDROID__
 
+using android::util::ProtoReader;
+
 namespace android {
 namespace os {
 namespace statsd {
@@ -252,12 +254,12 @@
         vector<uint8_t> outData;
         outData.resize(protoOut.size());
         size_t pos = 0;
-        auto iter = protoOut.data();
-        while (iter.readBuffer() != NULL) {
-            size_t toRead = iter.currentToRead();
-            std::memcpy(&(outData[pos]), iter.readBuffer(), toRead);
+        sp<ProtoReader> reader = protoOut.data();
+        while (reader->readBuffer() != NULL) {
+            size_t toRead = reader->currentToRead();
+            std::memcpy(&(outData[pos]), reader->readBuffer(), toRead);
             pos += toRead;
-            iter.rp()->move(toRead);
+            reader->move(toRead);
         }
 
         DimensionsValue result;
@@ -343,12 +345,12 @@
     vector<uint8_t> outData;
     outData.resize(protoOut.size());
     size_t pos = 0;
-    auto iter = protoOut.data();
-    while (iter.readBuffer() != NULL) {
-        size_t toRead = iter.currentToRead();
-        std::memcpy(&(outData[pos]), iter.readBuffer(), toRead);
+    sp<ProtoReader> reader = protoOut.data();
+    while (reader->readBuffer() != NULL) {
+        size_t toRead = reader->currentToRead();
+        std::memcpy(&(outData[pos]), reader->readBuffer(), toRead);
         pos += toRead;
-        iter.rp()->move(toRead);
+        reader->move(toRead);
     }
 
     DimensionsValue result;
@@ -405,12 +407,12 @@
     vector<uint8_t> outData;
     outData.resize(protoOut.size());
     size_t pos = 0;
-    auto iter = protoOut.data();
-    while (iter.readBuffer() != NULL) {
-        size_t toRead = iter.currentToRead();
-        std::memcpy(&(outData[pos]), iter.readBuffer(), toRead);
+    sp<ProtoReader> reader = protoOut.data();
+    while (reader->readBuffer() != NULL) {
+        size_t toRead = reader->currentToRead();
+        std::memcpy(&(outData[pos]), reader->readBuffer(), toRead);
         pos += toRead;
-        iter.rp()->move(toRead);
+        reader->move(toRead);
     }
 
     DimensionsValueTuple result;
@@ -458,12 +460,12 @@
     vector<uint8_t> outData;
     outData.resize(protoOutput.size());
     size_t pos = 0;
-    auto iter = protoOutput.data();
-    while (iter.readBuffer() != NULL) {
-        size_t toRead = iter.currentToRead();
-        std::memcpy(&(outData[pos]), iter.readBuffer(), toRead);
+    sp<ProtoReader> reader = protoOutput.data();
+    while (reader->readBuffer() != NULL) {
+        size_t toRead = reader->currentToRead();
+        std::memcpy(&(outData[pos]), reader->readBuffer(), toRead);
         pos += toRead;
-        iter.rp()->move(toRead);
+        reader->move(toRead);
     }
 
     Atom result;
diff --git a/cmds/statsd/tests/LogEvent_test.cpp b/cmds/statsd/tests/LogEvent_test.cpp
index eec3c73..b03517e 100644
--- a/cmds/statsd/tests/LogEvent_test.cpp
+++ b/cmds/statsd/tests/LogEvent_test.cpp
@@ -26,6 +26,7 @@
 
 using std::string;
 using util::ProtoOutputStream;
+using util::ProtoReader;
 
 TEST(LogEventTest, TestLogParsing) {
     LogEvent event1(1, 2000);
@@ -590,12 +591,12 @@
     std::vector<uint8_t> outData;
     outData.resize(proto.size());
     size_t pos = 0;
-    auto iter = proto.data();
-    while (iter.readBuffer() != NULL) {
-        size_t toRead = iter.currentToRead();
-        std::memcpy(&(outData[pos]), iter.readBuffer(), toRead);
+    sp<ProtoReader> reader = proto.data();
+    while (reader->readBuffer() != NULL) {
+        size_t toRead = reader->currentToRead();
+        std::memcpy(&(outData[pos]), reader->readBuffer(), toRead);
         pos += toRead;
-        iter.rp()->move(toRead);
+        reader->move(toRead);
     }
 
     std::string result_str(outData.begin(), outData.end());
@@ -629,12 +630,12 @@
     std::vector<uint8_t> outData;
     outData.resize(proto.size());
     size_t pos = 0;
-    auto iter = proto.data();
-    while (iter.readBuffer() != NULL) {
-        size_t toRead = iter.currentToRead();
-        std::memcpy(&(outData[pos]), iter.readBuffer(), toRead);
+    sp<ProtoReader> reader = proto.data();
+    while (reader->readBuffer() != NULL) {
+        size_t toRead = reader->currentToRead();
+        std::memcpy(&(outData[pos]), reader->readBuffer(), toRead);
         pos += toRead;
-        iter.rp()->move(toRead);
+        reader->move(toRead);
     }
 
     std::string result_str(outData.begin(), outData.end());
diff --git a/cmds/statsd/tests/UidMap_test.cpp b/cmds/statsd/tests/UidMap_test.cpp
index c04a40c..d9fa4e9 100644
--- a/cmds/statsd/tests/UidMap_test.cpp
+++ b/cmds/statsd/tests/UidMap_test.cpp
@@ -33,6 +33,7 @@
 namespace statsd {
 
 using android::util::ProtoOutputStream;
+using android::util::ProtoReader;
 
 #ifdef __ANDROID__
 const string kApp1 = "app1.sharing.1";
@@ -179,12 +180,12 @@
     vector<uint8_t> bytes;
     bytes.resize(proto->size());
     size_t pos = 0;
-    auto iter = proto->data();
-    while (iter.readBuffer() != NULL) {
-        size_t toRead = iter.currentToRead();
-        std::memcpy(&((bytes)[pos]), iter.readBuffer(), toRead);
+    sp<ProtoReader> reader = proto->data();
+    while (reader->readBuffer() != NULL) {
+        size_t toRead = reader->currentToRead();
+        std::memcpy(&((bytes)[pos]), reader->readBuffer(), toRead);
         pos += toRead;
-        iter.rp()->move(toRead);
+        reader->move(toRead);
     }
     results->ParseFromArray(bytes.data(), bytes.size());
 }
diff --git a/cmds/statsd/tests/external/IncidentReportArgs_test.cpp b/cmds/statsd/tests/external/IncidentReportArgs_test.cpp
index c170b12..38bc194 100644
--- a/cmds/statsd/tests/external/IncidentReportArgs_test.cpp
+++ b/cmds/statsd/tests/external/IncidentReportArgs_test.cpp
@@ -36,7 +36,7 @@
     args.addHeader(header1);
     args.addHeader(header2);
 
-    args.setDest(1);
+    args.setPrivacyPolicy(1);
 
     args.setReceiverPkg("com.android.os");
     args.setReceiverCls("com.android.os.Receiver");
@@ -56,10 +56,10 @@
     sections.insert(1000);
     sections.insert(1001);
     EXPECT_EQ(sections, args2.sections());
-    EXPECT_EQ(1, args2.dest());
+    EXPECT_EQ(1, args2.getPrivacyPolicy());
 
-    EXPECT_EQ(String16("com.android.os"), args2.receiverPkg());
-    EXPECT_EQ(String16("com.android.os.Receiver"), args2.receiverCls());
+    EXPECT_EQ(string("com.android.os"), args2.receiverPkg());
+    EXPECT_EQ(string("com.android.os.Receiver"), args2.receiverCls());
 
     vector<vector<uint8_t>> headers;
     headers.push_back(header1);
@@ -69,4 +69,4 @@
 
 }  // namespace statsd
 }  // namespace os
-}  // namespace android
\ No newline at end of file
+}  // namespace android
diff --git a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp
index 90b9e81..afa05a9 100644
--- a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp
+++ b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp
@@ -26,6 +26,7 @@
 
 using namespace testing;
 using android::sp;
+using android::util::ProtoReader;
 using std::make_shared;
 using std::set;
 using std::shared_ptr;
@@ -2730,12 +2731,12 @@
     vector<uint8_t> bytes;
     bytes.resize(proto->size());
     size_t pos = 0;
-    auto iter = proto->data();
-    while (iter.readBuffer() != NULL) {
-        size_t toRead = iter.currentToRead();
-        std::memcpy(&((bytes)[pos]), iter.readBuffer(), toRead);
+    sp<ProtoReader> reader = proto->data();
+    while (reader->readBuffer() != NULL) {
+        size_t toRead = reader->currentToRead();
+        std::memcpy(&((bytes)[pos]), reader->readBuffer(), toRead);
         pos += toRead;
-        iter.rp()->move(toRead);
+        reader->move(toRead);
     }
 
     StatsLogReport report;