Add the remaining CarTelemetryManager API

This change adds the remaining APIs to CarTelemetryManager
(go/st-communication-api), which allows the client (cloud app) to send
manifest as well as receive script outputs

CarTelemetryService is enabled with
> adb shell cmd car_service enable-feature car_telemetry_service

Bug: 184087869

Test: m CarService
Test: atest CarTelemetryManagerTest

Change-Id: Ic2fd311c884bc52773a9c8fe000618a971fcbc7d
Merged-In: Ic2fd311c884bc52773a9c8fe000618a971fcbc7d
(cherry picked from commit 16d571374d60bc2920f5c0f8ccdb7e6a5eb386c8)
diff --git a/service/src/com/android/car/telemetry/CarTelemetryService.java b/service/src/com/android/car/telemetry/CarTelemetryService.java
index b68e020..74f4509 100644
--- a/service/src/com/android/car/telemetry/CarTelemetryService.java
+++ b/service/src/com/android/car/telemetry/CarTelemetryService.java
@@ -15,10 +15,14 @@
  */
 package com.android.car.telemetry;
 
+import static android.car.telemetry.CarTelemetryManager.ERROR_NONE;
+
 import android.annotation.NonNull;
 import android.car.Car;
+import android.car.telemetry.CarTelemetryManager.AddManifestError;
 import android.car.telemetry.ICarTelemetryService;
 import android.car.telemetry.ICarTelemetryServiceListener;
+import android.car.telemetry.ManifestKey;
 import android.content.Context;
 import android.util.IndentingPrintWriter;
 import android.util.Slog;
@@ -62,7 +66,7 @@
      */
     @Override
     public void setListener(@NonNull ICarTelemetryServiceListener listener) {
-        // TODO(b/150978930): verify that only a hardcoded app can set the listener
+        // TODO(b/184890506): verify that only a hardcoded app can set the listener
         mContext.enforceCallingOrSelfPermission(
                 Car.PERMISSION_USE_CAR_TELEMETRY_SERVICE, "setListener");
         if (DEBUG) {
@@ -83,4 +87,89 @@
         }
         mListener = null;
     }
+
+    /**
+     * Allows client to send telemetry manifests.
+     *
+     * @param key      the unique key to identify the manifest.
+     * @param manifest the serialized bytes of a Manifest object.
+     * @return {@link AddManifestError} the error code.
+     */
+    @Override
+    public @AddManifestError int addManifest(@NonNull ManifestKey key, @NonNull byte[] manifest) {
+        // TODO(b/184087869): Implement
+        mContext.enforceCallingOrSelfPermission(
+                Car.PERMISSION_USE_CAR_TELEMETRY_SERVICE, "setListener");
+        if (DEBUG) {
+            Slog.d(TAG, "Adding manifest to car telemetry service");
+        }
+        return ERROR_NONE;
+    }
+
+    /**
+     * Removes a manifest based on the key.
+     */
+    @Override
+    public boolean removeManifest(@NonNull ManifestKey key) {
+        // TODO(b/184087869): Implement
+        mContext.enforceCallingOrSelfPermission(
+                Car.PERMISSION_USE_CAR_TELEMETRY_SERVICE, "setListener");
+        if (DEBUG) {
+            Slog.d(TAG, "Removing manifest from car telemetry service");
+        }
+        return true;
+    }
+
+    /**
+     * Removes all manifests.
+     */
+    @Override
+    public void removeAllManifests() {
+        // TODO(b/184087869): Implement
+        mContext.enforceCallingOrSelfPermission(
+                Car.PERMISSION_USE_CAR_TELEMETRY_SERVICE, "setListener");
+        if (DEBUG) {
+            Slog.d(TAG, "Removing all manifest from car telemetry service");
+        }
+    }
+
+    /**
+     * Sends script results associated with the given key using the
+     * {@link ICarTelemetryServiceListener}.
+     */
+    @Override
+    public void sendFinishedReports(@NonNull ManifestKey key) {
+        // TODO(b/184087869): Implement
+        mContext.enforceCallingOrSelfPermission(
+                Car.PERMISSION_USE_CAR_TELEMETRY_SERVICE, "setListener");
+        if (DEBUG) {
+            Slog.d(TAG, "Flushing reports for a manifest");
+        }
+    }
+
+    /**
+     * Sends all script results associated using the {@link ICarTelemetryServiceListener}.
+     */
+    @Override
+    public void sendAllFinishedReports() {
+        // TODO(b/184087869): Implement
+        mContext.enforceCallingOrSelfPermission(
+                Car.PERMISSION_USE_CAR_TELEMETRY_SERVICE, "setListener");
+        if (DEBUG) {
+            Slog.d(TAG, "Flushing all reports");
+        }
+    }
+
+    /**
+     * Sends all errors using the {@link ICarTelemetryServiceListener}.
+     */
+    @Override
+    public void sendScriptExecutionErrors() {
+        // TODO(b/184087869): Implement
+        mContext.enforceCallingOrSelfPermission(
+                Car.PERMISSION_USE_CAR_TELEMETRY_SERVICE, "setListener");
+        if (DEBUG) {
+            Slog.d(TAG, "Flushing script execution errors");
+        }
+    }
 }