Create a dummy MetricsReporterStub class

This handles the update_engine_sideload target, and thus avoiding
the insertion of "#ifdef _UE_SIDELOAD" everywhere when we report the
metrics for android.

Bug: 30989466
Test: build pass on marlin
Change-Id: Ib00ab8476218df15768bdbae1a3510f8584aa7c7
diff --git a/Android.mk b/Android.mk
index cc06643..f02794c 100644
--- a/Android.mk
+++ b/Android.mk
@@ -466,7 +466,7 @@
 LOCAL_SRC_FILES := \
     boot_control_recovery.cc \
     hardware_android.cc \
-    metrics_reporter_android.cc \
+    metrics_reporter_stub.cc \
     metrics_utils.cc \
     network_selector_stub.cc \
     proxy_resolver.cc \
diff --git a/metrics_reporter_android.cc b/metrics_reporter_android.cc
index bdc245e..869c4db 100644
--- a/metrics_reporter_android.cc
+++ b/metrics_reporter_android.cc
@@ -16,28 +16,24 @@
 
 #include "update_engine/metrics_reporter_android.h"
 
-#ifndef _UE_SIDELOAD
+#include <memory>
 #include <string>
 
 #include <metricslogger/metrics_logger.h>
 
 #include "update_engine/common/constants.h"
-#endif  // _UE_SIDELOAD
 
 namespace {
-#ifndef _UE_SIDELOAD
 void LogHistogram(const std::string& metrics, int value) {
   android::metricslogger::LogHistogram(metrics, value);
   LOG(INFO) << "uploading " << value << "to histogram for metric " << metrics;
 }
-#endif
 }  // namespace
 
 namespace chromeos_update_engine {
 
 namespace metrics {
 
-#ifndef _UE_SIDELOAD
 // The histograms are defined in:
 // depot/google3/analysis/uma/configs/clearcut/TRON/histograms.xml
 constexpr char kMetricsUpdateEngineAttemptNumber[] =
@@ -65,7 +61,11 @@
     "ota_update_engine_successful_update_payload_type";
 constexpr char kMetricsUpdateEngineSuccessfulUpdateRebootCount[] =
     "ota_update_engine_successful_update_reboot_count";
-#endif
+
+std::unique_ptr<MetricsReporterInterface> CreateMetricsReporter() {
+  return std::make_unique<MetricsReporterAndroid>();
+}
+
 }  // namespace metrics
 
 void MetricsReporterAndroid::ReportUpdateAttemptMetrics(
@@ -77,8 +77,6 @@
     int64_t payload_size,
     metrics::AttemptResult attempt_result,
     ErrorCode error_code) {
-// No need to log histogram under sideload mode.
-#ifndef _UE_SIDELOAD
   LogHistogram(metrics::kMetricsUpdateEngineAttemptNumber, attempt_number);
   LogHistogram(metrics::kMetricsUpdateEngineAttemptPayloadType,
                static_cast<int>(payload_type));
@@ -95,7 +93,6 @@
                static_cast<int>(attempt_result));
   LogHistogram(metrics::kMetricsUpdateEngineAttemptErrorCode,
                static_cast<int>(error_code));
-#endif
 }
 
 void MetricsReporterAndroid::ReportSuccessfulUpdateMetrics(
@@ -108,7 +105,6 @@
     base::TimeDelta total_duration,
     int reboot_count,
     int /* url_switch_count */) {
-#ifndef _UE_SIDELOAD
   LogHistogram(metrics::kMetricsUpdateEngineSuccessfulUpdateAttemptCount,
                attempt_count);
   LogHistogram(metrics::kMetricsUpdateEngineSuccessfulUpdatePayloadType,
@@ -123,15 +119,12 @@
       total_duration.InMinutes());
   LogHistogram(metrics::kMetricsUpdateEngineSuccessfulUpdateRebootCount,
                reboot_count);
-#endif
 }
 
 void MetricsReporterAndroid::ReportAbnormallyTerminatedUpdateAttemptMetrics() {
-#ifndef _UE_SIDELOAD
   int attempt_result =
       static_cast<int>(metrics::AttemptResult::kAbnormalTermination);
   LogHistogram(metrics::kMetricsUpdateEngineAttemptResult, attempt_result);
-#endif
 }
 
 };  // namespace chromeos_update_engine
diff --git a/metrics_reporter_interface.h b/metrics_reporter_interface.h
index bc9d387..2c7ce5b 100644
--- a/metrics_reporter_interface.h
+++ b/metrics_reporter_interface.h
@@ -17,6 +17,8 @@
 #ifndef UPDATE_ENGINE_METRICS_REPORTER_INTERFACE_H_
 #define UPDATE_ENGINE_METRICS_REPORTER_INTERFACE_H_
 
+#include <memory>
+
 #include <base/time/time.h>
 
 #include "update_engine/common/constants.h"
@@ -29,6 +31,12 @@
 enum class ServerToCheck;
 enum class CertificateCheckResult;
 
+namespace metrics {
+
+std::unique_ptr<MetricsReporterInterface> CreateMetricsReporter();
+
+}  // namespace metrics
+
 class MetricsReporterInterface {
  public:
   virtual ~MetricsReporterInterface() = default;
diff --git a/metrics_reporter_omaha.cc b/metrics_reporter_omaha.cc
index 5f24cbf..0397b83 100644
--- a/metrics_reporter_omaha.cc
+++ b/metrics_reporter_omaha.cc
@@ -112,6 +112,10 @@
     "UpdateEngine.InstallDateProvisioningSource";
 const char kMetricTimeToRebootMinutes[] = "UpdateEngine.TimeToRebootMinutes";
 
+std::unique_ptr<MetricsReporterInterface> CreateMetricsReporter() {
+  return std::make_unique<MetricsReporterOmaha>();
+}
+
 }  // namespace metrics
 
 MetricsReporterOmaha::MetricsReporterOmaha()
diff --git a/metrics_reporter_stub.cc b/metrics_reporter_stub.cc
new file mode 100644
index 0000000..81664a5
--- /dev/null
+++ b/metrics_reporter_stub.cc
@@ -0,0 +1,31 @@
+//
+// Copyright (C) 2017 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.
+//
+
+#include "update_engine/metrics_reporter_stub.h"
+
+#include <memory>
+
+namespace chromeos_update_engine {
+
+namespace metrics {
+
+std::unique_ptr<MetricsReporterInterface> CreateMetricsReporter() {
+  return std::make_unique<MetricsReporterStub>();
+}
+
+}  // namespace metrics
+
+}  // namespace chromeos_update_engine
diff --git a/metrics_reporter_stub.h b/metrics_reporter_stub.h
new file mode 100644
index 0000000..d0f75ab
--- /dev/null
+++ b/metrics_reporter_stub.h
@@ -0,0 +1,88 @@
+//
+// Copyright (C) 2017 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.
+//
+
+#ifndef UPDATE_ENGINE_METRICS_REPORTER_STUB_H_
+#define UPDATE_ENGINE_METRICS_REPORTER_STUB_H_
+
+#include "update_engine/common/error_code.h"
+#include "update_engine/metrics_constants.h"
+#include "update_engine/metrics_reporter_interface.h"
+
+namespace chromeos_update_engine {
+
+class MetricsReporterStub : public MetricsReporterInterface {
+ public:
+  MetricsReporterStub() = default;
+
+  ~MetricsReporterStub() override = default;
+
+  void Initialize() override {}
+
+  void ReportRollbackMetrics(metrics::RollbackResult result) override {}
+
+  void ReportDailyMetrics(base::TimeDelta os_age) override {}
+
+  void ReportUpdateCheckMetrics(
+      SystemState* system_state,
+      metrics::CheckResult result,
+      metrics::CheckReaction reaction,
+      metrics::DownloadErrorCode download_error_code) override {}
+
+  void ReportUpdateAttemptMetrics(SystemState* system_state,
+                                  int attempt_number,
+                                  PayloadType payload_type,
+                                  base::TimeDelta duration,
+                                  base::TimeDelta duration_uptime,
+                                  int64_t payload_size,
+                                  metrics::AttemptResult attempt_result,
+                                  ErrorCode internal_error_code) override {}
+
+  void ReportUpdateAttemptDownloadMetrics(
+      int64_t payload_bytes_downloaded,
+      int64_t payload_download_speed_bps,
+      DownloadSource download_source,
+      metrics::DownloadErrorCode payload_download_error_code,
+      metrics::ConnectionType connection_type) override {}
+
+  void ReportAbnormallyTerminatedUpdateAttemptMetrics() override {}
+
+  void ReportSuccessfulUpdateMetrics(
+      int attempt_count,
+      int updates_abandoned_count,
+      PayloadType payload_type,
+      int64_t payload_size,
+      int64_t num_bytes_downloaded[kNumDownloadSources],
+      int download_overhead_percentage,
+      base::TimeDelta total_duration,
+      int reboot_count,
+      int url_switch_count) override {}
+
+  void ReportCertificateCheckMetrics(ServerToCheck server_to_check,
+                                     CertificateCheckResult result) override {}
+
+  void ReportFailedUpdateCount(int target_attempt) override {}
+
+  void ReportTimeToReboot(int time_to_reboot_minutes) override {}
+
+  void ReportInstallDateProvisioningSource(int source, int max) override {}
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MetricsReporterStub);
+};
+
+}  // namespace chromeos_update_engine
+
+#endif  // UPDATE_ENGINE_METRICS_REPORTER_STUB_H_
diff --git a/update_attempter_android.cc b/update_attempter_android.cc
index dbddfe3..6d67000 100644
--- a/update_attempter_android.cc
+++ b/update_attempter_android.cc
@@ -34,7 +34,7 @@
 #include "update_engine/common/file_fetcher.h"
 #include "update_engine/common/utils.h"
 #include "update_engine/daemon_state_interface.h"
-#include "update_engine/metrics_reporter_android.h"
+#include "update_engine/metrics_reporter_interface.h"
 #include "update_engine/metrics_utils.h"
 #include "update_engine/network_selector.h"
 #include "update_engine/payload_consumer/download_action.h"
@@ -92,8 +92,8 @@
       boot_control_(boot_control),
       hardware_(hardware),
       processor_(new ActionProcessor()),
-      clock_(new Clock()),
-      metrics_reporter_(new MetricsReporterAndroid()) {
+      clock_(new Clock()) {
+  metrics_reporter_ = metrics::CreateMetricsReporter();
   network_selector_ = network::CreateNetworkSelector();
 }