Native API Council asked that we remove the C++ class from the public header.

The API is simple enough, so just reimplement everything using the
C API directly.

Bug: 148940365
Test: treehugger
Change-Id: I0a75744e975e8d3c2a557e533eacd03200388ddc
This commit is contained in:
Joe Onorato
2020-03-20 16:25:14 -07:00
parent 18122752c0
commit 084aa3cb17
7 changed files with 112 additions and 94 deletions

View File

@@ -130,15 +130,15 @@ bool GenerateIncidentReport(const IncidentdDetails& config, int64_t rule_id, int
return false;
}
android::os::IncidentReportRequest incidentReport;
AIncidentReportArgs* args = AIncidentReportArgs_init();
vector<uint8_t> protoData;
getProtoData(rule_id, metricId, dimensionKey, metricValue, configKey,
config.alert_description(), &protoData);
incidentReport.addHeader(protoData);
AIncidentReportArgs_addHeader(args, protoData.data(), protoData.size());
for (int i = 0; i < config.section_size(); i++) {
incidentReport.addSection(config.section(i));
AIncidentReportArgs_addSection(args, config.section(i));
}
uint8_t dest;
@@ -152,13 +152,16 @@ bool GenerateIncidentReport(const IncidentdDetails& config, int64_t rule_id, int
default:
dest = INCIDENT_REPORT_PRIVACY_POLICY_AUTOMATIC;
}
incidentReport.setPrivacyPolicy(dest);
AIncidentReportArgs_setPrivacyPolicy(args, dest);
incidentReport.setReceiverPackage(config.receiver_pkg());
AIncidentReportArgs_setReceiverPackage(args, config.receiver_pkg().c_str());
incidentReport.setReceiverClass(config.receiver_cls());
AIncidentReportArgs_setReceiverClass(args, config.receiver_cls().c_str());
return incidentReport.takeReport() == NO_ERROR;
int err = AIncidentReportArgs_takeReport(args);
AIncidentReportArgs_delete(args);
return err == NO_ERROR;
}
} // namespace statsd

View File

@@ -93,6 +93,7 @@ cc_library_shared {
cc_test {
name: "libincident_test",
test_config: "AndroidTest.xml",
defaults: ["libincidentpriv_defaults"],
test_suites: ["device-tests"],
@@ -104,7 +105,6 @@ cc_test {
srcs: [
"tests/IncidentReportArgs_test.cpp",
"tests/IncidentReportRequest_test.cpp",
"tests/c_api_compile_test.c",
],
shared_libs: [

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2020 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<configuration description="Config for libincident_test">
<option name="test-suite-tag" value="device-tests" />
<option name="config-descriptor:metadata" key="component" value="misc" />
<target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
<option name="cleanup" value="true" />
<option name="push" value="libincident_test->/data/local/tmp/libincident_test" />
</target_preparer>
<test class="com.android.tradefed.testtype.GTest" >
<option name="native-test-device-path" value="/data/local/tmp" />
<option name="module-name" value="libincident_test" />
</test>
</configuration>

View File

@@ -0,0 +1,10 @@
{
"presubmit": [
{
"name": "libincident_test"
},
{
"name": "GtsLibIncidentTests"
}
]
}

View File

@@ -18,16 +18,12 @@
* @file incident_report.h
*/
#ifndef ANDROID_INCIDENT_INCIDENT_REPORT_H
#define ANDROID_INCIDENT_INCIDENT_REPORT_H
#pragma once
#include <stdbool.h>
#include <stdint.h>
#if __cplusplus
#include <set>
#include <string>
#include <vector>
extern "C" {
#endif // __cplusplus
@@ -125,68 +121,5 @@ int AIncidentReportArgs_takeReport(AIncidentReportArgs* args);
#if __cplusplus
} // extern "C"
namespace android {
namespace os {
class IncidentReportRequest {
public:
inline IncidentReportRequest() {
mImpl = AIncidentReportArgs_init();
}
inline IncidentReportRequest(const IncidentReportRequest& that) {
mImpl = AIncidentReportArgs_clone(that.mImpl);
}
inline ~IncidentReportRequest() {
AIncidentReportArgs_delete(mImpl);
}
inline AIncidentReportArgs* getImpl() {
return mImpl;
}
inline void setAll(bool all) {
AIncidentReportArgs_setAll(mImpl, all);
}
inline void setPrivacyPolicy(int privacyPolicy) {
AIncidentReportArgs_setPrivacyPolicy(mImpl, privacyPolicy);
}
inline void addSection(int section) {
AIncidentReportArgs_addSection(mImpl, section);
}
inline void setReceiverPackage(const std::string& pkg) {
AIncidentReportArgs_setReceiverPackage(mImpl, pkg.c_str());
};
inline void setReceiverClass(const std::string& cls) {
AIncidentReportArgs_setReceiverClass(mImpl, cls.c_str());
};
inline void addHeader(const std::vector<uint8_t>& headerProto) {
AIncidentReportArgs_addHeader(mImpl, headerProto.data(), headerProto.size());
};
inline void addHeader(const uint8_t* buf, size_t size) {
AIncidentReportArgs_addHeader(mImpl, buf, size);
};
// returns a status_t
inline int takeReport() {
return AIncidentReportArgs_takeReport(mImpl);
}
private:
AIncidentReportArgs* mImpl;
};
} // namespace os
} // namespace android
#endif // __cplusplus
#endif // ANDROID_INCIDENT_INCIDENT_REPORT_H

View File

@@ -17,9 +17,67 @@
#include <gtest/gtest.h>
namespace android {
namespace os {
namespace statsd {
#include <vector>
#include <string>
using namespace std;
using namespace android::os;
class IncidentReportRequest {
public:
inline IncidentReportRequest() {
mImpl = AIncidentReportArgs_init();
}
inline IncidentReportRequest(const IncidentReportRequest& that) {
mImpl = AIncidentReportArgs_clone(that.mImpl);
}
inline ~IncidentReportRequest() {
AIncidentReportArgs_delete(mImpl);
}
inline AIncidentReportArgs* getImpl() {
return mImpl;
}
inline void setAll(bool all) {
AIncidentReportArgs_setAll(mImpl, all);
}
inline void setPrivacyPolicy(int privacyPolicy) {
AIncidentReportArgs_setPrivacyPolicy(mImpl, privacyPolicy);
}
inline void addSection(int section) {
AIncidentReportArgs_addSection(mImpl, section);
}
inline void setReceiverPackage(const string& pkg) {
AIncidentReportArgs_setReceiverPackage(mImpl, pkg.c_str());
};
inline void setReceiverClass(const string& cls) {
AIncidentReportArgs_setReceiverClass(mImpl, cls.c_str());
};
inline void addHeader(const vector<uint8_t>& headerProto) {
AIncidentReportArgs_addHeader(mImpl, headerProto.data(), headerProto.size());
};
inline void addHeader(const uint8_t* buf, size_t size) {
AIncidentReportArgs_addHeader(mImpl, buf, size);
};
// returns a status_t
inline int takeReport() {
return AIncidentReportArgs_takeReport(mImpl);
}
private:
AIncidentReportArgs* mImpl;
};
TEST(IncidentReportRequestTest, testWrite) {
IncidentReportRequest request;
@@ -60,6 +118,3 @@ TEST(IncidentReportRequestTest, testWrite) {
EXPECT_EQ(headers, args->headers());
}
} // namespace statsd
} // namespace os
} // namespace android

View File

@@ -1,11 +0,0 @@
#include <stdio.h>
#include <incident/incident_report.h>
/*
* This file ensures that incident/incident_report.h actually compiles with C,
* since there is no other place in the tree that actually uses it from C.
*/
int not_called() {
return 0;
}