Update Kitchensink cluster test to use protos am: bfeaac6e35 am: 748e6b79ad
am: 829ef33641

Change-Id: Ide418c786089a77eb76a1385b462dd8acd399c95
diff --git a/tests/EmbeddedKitchenSinkApp/Android.mk b/tests/EmbeddedKitchenSinkApp/Android.mk
index dd096fb..b1371d5 100644
--- a/tests/EmbeddedKitchenSinkApp/Android.mk
+++ b/tests/EmbeddedKitchenSinkApp/Android.mk
@@ -52,7 +52,8 @@
     vehicle-hal-support-lib \
     com.android.car.keventreader-client \
     guava \
-    kitchensink-gson
+    kitchensink-gson \
+    android.car.cluster.navigation
 
 LOCAL_JAVA_LIBRARIES += android.car
 
diff --git a/tests/EmbeddedKitchenSinkApp/res/raw/nav_state_data.json b/tests/EmbeddedKitchenSinkApp/res/raw/nav_state_data.json
deleted file mode 100644
index 414cc2d..0000000
--- a/tests/EmbeddedKitchenSinkApp/res/raw/nav_state_data.json
+++ /dev/null
@@ -1,143 +0,0 @@
-[
-  {
-    "mSteps": [
-      {
-        "mDistance": {
-          "mMeters": 200,
-          "mDisplayValue": "0.2",
-          "mDisplayUnit": { "mValues": [ "KILOMETERS" ] }
-        },
-        "mManeuver": {
-          "mType": { "mValues": [ "DEPART" ] }
-        },
-        "mCue":{
-          "mElements": [
-            {
-              "mText": "Stay on"
-            },
-            {
-              "mText": "US 101",
-              "mImage": {
-                "mContentUri": "content://com.google.android.car.kitchensink.cluster.clustercontentprovider/img/US_101.png",
-                "mOriginalWidth": 60,
-                "mOriginalHeight": 52
-              }
-            },
-            {
-              "mText": "East"
-            }
-          ]
-        },
-        "mLanes": [
-          {
-            "mDirections": [
-              {
-                "mShape": { "mValues": [ "SLIGHT_LEFT" ] },
-                "mHighlighted": false
-              }
-            ]
-          },
-          {
-            "mDirections": [
-              {
-                "mShape": { "mValues": [ "STRAIGHT" ] },
-                "mHighlighted": false
-              }
-            ]
-          },
-          {
-            "mDirections": [
-              {
-                "mShape": { "mValues": [ "STRAIGHT" ] },
-                "mHighlighted": false
-              }
-            ]
-          },
-          {
-            "mDirections": [
-              {
-                "mShape": { "mValues": [ "STRAIGHT" ] },
-                "mHighlighted": false
-              }
-            ]
-          },
-          {
-            "mDirections": [
-              {
-                "mShape": { "mValues": [ "STRAIGHT" ] },
-                "mHighlighted": false
-              }
-            ]
-          },
-          {
-            "mDirections": [
-              {
-                "mShape": { "mValues": [ "STRAIGHT" ] },
-                "mHighlighted": false
-              },
-              {
-                "mShape": { "mValues": [ "SLIGHT_RIGHT" ] },
-                "mHighlighted": true
-              }
-            ]
-          },
-          {
-            "mDirections": [
-              {
-                "mShape": { "mValues": [ "SLIGHT_RIGHT" ] },
-                "mHighlighted": false
-              }
-            ]
-          }
-        ]
-      }
-    ],
-    "mCurrentSegment": {
-      "mName": "On Something Really Long St"
-    },
-    "mDestinations": [
-      {
-        "mTitle": "Home",
-        "mAddress": "123 Main st",
-        "mDistance": {
-          "mMeters": 2000,
-          "mDisplayValue": "2",
-          "mDisplayUnit": { "mValues": [ "KILOMETERS" ] }
-        },
-        "mEta": {
-          "mSecondsSinceEpoch": 1551314762,
-          "mZoneId": "America/Los_Angeles"
-        },
-        "mTraffic": { "mValues": [ "MEDIUM" ] }
-      }
-    ]
-  },
-  {
-    "mSteps": [
-      {
-        "mDistance": {
-          "mMeters": 91,
-          "mDisplayValue": "300",
-          "mDisplayUnit": { "mValues": [ "FEET" ] }
-        },
-        "mManeuver": {
-          "mType": { "mValues": [ "TURN_NORMAL_LEFT" ] }
-        }
-      }
-    ]
-  },
-  {
-    "mSteps": [
-      {
-        "mDistance": {
-          "mMeters": 3218,
-          "mDisplayValue": "2",
-          "mDisplayUnit": { "mValues": [ "MILES" ] }
-        },
-        "mManeuver": {
-          "mType": { "mValues": [ "TURN_NORMAL_RIGHT" ] }
-        }
-      }
-    ]
-  }
-]
\ No newline at end of file
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/cluster/InstrumentClusterFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/cluster/InstrumentClusterFragment.java
index 2c0e715..7657c38 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/cluster/InstrumentClusterFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/cluster/InstrumentClusterFragment.java
@@ -18,6 +18,20 @@
 import android.annotation.Nullable;
 import android.car.Car;
 import android.car.CarAppFocusManager;
+import android.car.CarNotConnectedException;
+import android.car.cluster.navigation.NavigationState;
+import android.car.cluster.navigation.NavigationState.Cue;
+import android.car.cluster.navigation.NavigationState.Cue.CueElement;
+import android.car.cluster.navigation.NavigationState.Destination;
+import android.car.cluster.navigation.NavigationState.Destination.Traffic;
+import android.car.cluster.navigation.NavigationState.Distance;
+import android.car.cluster.navigation.NavigationState.Lane;
+import android.car.cluster.navigation.NavigationState.Lane.LaneDirection;
+import android.car.cluster.navigation.NavigationState.Maneuver;
+import android.car.cluster.navigation.NavigationState.NavigationStateProto;
+import android.car.cluster.navigation.NavigationState.Road;
+import android.car.cluster.navigation.NavigationState.Step;
+import android.car.cluster.navigation.NavigationState.Timestamp;
 import android.car.navigation.CarNavigationStatusManager;
 import android.content.ComponentName;
 import android.content.ServiceConnection;
@@ -33,12 +47,9 @@
 
 import androidx.annotation.IdRes;
 import androidx.annotation.NonNull;
-import androidx.car.cluster.navigation.NavigationState;
 import androidx.fragment.app.Fragment;
 
 import com.google.android.car.kitchensink.R;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -59,7 +70,7 @@
     private CarAppFocusManager mCarAppFocusManager;
     private Car mCarApi;
     private Timer mTimer;
-    private NavigationState[] mNavStateData;
+    private NavigationStateProto[] mNavStateData;
     private Button mTurnByTurnButton;
 
     private ServiceConnection mCarServiceConnection = new ServiceConnection() {
@@ -80,22 +91,23 @@
 
     private final CarAppFocusManager.OnAppFocusOwnershipCallback mFocusCallback =
             new CarAppFocusManager.OnAppFocusOwnershipCallback() {
-        @Override
-        public void onAppFocusOwnershipLost(@CarAppFocusManager.AppFocusType int appType) {
-            if (Log.isLoggable(TAG, Log.DEBUG)) {
-                Log.d(TAG, "onAppFocusOwnershipLost, appType: " + appType);
-            }
-            Toast.makeText(getContext(), getText(R.string.cluster_nav_app_context_loss),
-                    Toast.LENGTH_LONG).show();
-        }
+                @Override
+                public void onAppFocusOwnershipLost(@CarAppFocusManager.AppFocusType int appType) {
+                    if (Log.isLoggable(TAG, Log.DEBUG)) {
+                        Log.d(TAG, "onAppFocusOwnershipLost, appType: " + appType);
+                    }
+                    Toast.makeText(getContext(), getText(R.string.cluster_nav_app_context_loss),
+                            Toast.LENGTH_LONG).show();
+                }
 
-        @Override
-        public void onAppFocusOwnershipGranted(@CarAppFocusManager.AppFocusType int appType) {
-            if (Log.isLoggable(TAG, Log.DEBUG)) {
-                Log.d(TAG, "onAppFocusOwnershipGranted, appType: " + appType);
-            }
-        }
-    };
+                @Override
+                public void onAppFocusOwnershipGranted(
+                        @CarAppFocusManager.AppFocusType int appType) {
+                    if (Log.isLoggable(TAG, Log.DEBUG)) {
+                        Log.d(TAG, "onAppFocusOwnershipGranted, appType: " + appType);
+                    }
+                }
+            };
     private CarAppFocusManager.OnAppFocusChangedListener mOnAppFocusChangedListener =
             (appType, active) -> {
                 if (Log.isLoggable(TAG, Log.DEBUG)) {
@@ -114,21 +126,68 @@
         mCarApi.connect();
     }
 
-    /**
-     * Loads sample navigation data from the "nav_state_data.json" file.
-     */
     @NonNull
-    private NavigationState[] getNavStateData() {
-        try {
-            Gson gson = new GsonBuilder().create();
-            String navStateData = getRawResourceAsString(R.raw.nav_state_data);
-            NavigationState[] navigationState = gson.fromJson(navStateData,
-                    NavigationState[].class);
-            return navigationState;
-        } catch (IOException ex) {
-            Log.e(TAG, "Unable to read navigation state data", ex);
-            return new NavigationState[0];
-        }
+    private NavigationStateProto[] getNavStateData() {
+        NavigationStateProto[] navigationStateArray = new NavigationStateProto[1];
+
+        navigationStateArray[0] = NavigationStateProto.newBuilder()
+                .addSteps(Step.newBuilder()
+                        .setManeuver(Maneuver.newBuilder()
+                                .setType(Maneuver.Type.DEPART)
+                                .build())
+                        .setDistance(Distance.newBuilder()
+                                .setMeters(300)
+                                .setDisplayUnits(Distance.Unit.FEET)
+                                .setDisplayValue("0.5")
+                                .build())
+                        .setCue(Cue.newBuilder()
+                                .addElements(CueElement.newBuilder()
+                                        .setText("Stay on ")
+                                        .build())
+                                .addElements(CueElement.newBuilder()
+                                        .setText("US 101 ")
+                                        .setImage(NavigationState.ImageReference.newBuilder()
+                                                .setAspectRatio(1.153846)
+                                                .setContentUri(
+                                                        "content://com.google.android.car"
+                                                                + ".kitchensink.cluster"
+                                                                + ".clustercontentprovider/img"
+                                                                + "/US_101.png")
+                                                .build())
+                                        .build())
+                                .build())
+                        .addLanes(Lane.newBuilder()
+                                .addLaneDirections(LaneDirection.newBuilder()
+                                        .setShape(LaneDirection.Shape.SLIGHT_LEFT)
+                                        .setIsHighlighted(false)
+                                        .build())
+                                .addLaneDirections(LaneDirection.newBuilder()
+                                        .setShape(LaneDirection.Shape.STRAIGHT)
+                                        .setIsHighlighted(true)
+                                        .build())
+                                .build())
+                        .build())
+                .setCurrentRoad(Road.newBuilder()
+                        .setName("On something really long st")
+                        .build())
+                .addDestinations(Destination.newBuilder()
+                        .setTitle("Home")
+                        .setAddress("123 Main st")
+                        .setDistance(Distance.newBuilder()
+                                .setMeters(2000)
+                                .setDisplayValue("2")
+                                .setDisplayUnits(Distance.Unit.KILOMETERS)
+                                .build())
+                        .setEstimatedTimeAtArrival(Timestamp.newBuilder()
+                                .setSeconds(1592610807)
+                                .build())
+                        .setFormattedDurationUntilArrival("45 min")
+                        .setZoneId("America/Los_Angeles")
+                        .setTraffic(Traffic.HIGH)
+                        .build())
+                .build();
+
+        return navigationStateArray;
     }
 
     /**
@@ -216,11 +275,15 @@
     /**
      * Sends one update of the navigation state through the {@link CarNavigationStatusManager}
      */
-    private void sendTurn(@NonNull NavigationState state) {
-        Bundle bundle = new Bundle();
-        bundle.putParcelable("navstate", state.toParcelable());
-        mCarNavigationStatusManager.sendEvent(1, bundle);
-        Log.i(TAG, "Sending nav state: " + state);
+    private void sendTurn(@NonNull NavigationStateProto state) {
+        try {
+            Bundle bundle = new Bundle();
+            bundle.putByteArray("navstate2", state.toByteArray());
+            mCarNavigationStatusManager.sendEvent(1, bundle);
+            Log.i(TAG, "Sending nav state: " + state);
+        } catch (CarNotConnectedException e) {
+            Log.e(TAG, "Failed to send turn information.", e);
+        }
     }
 
     private void initCluster() {
@@ -260,7 +323,7 @@
                 != PackageManager.PERMISSION_GRANTED) {
             Log.i(TAG, "Requesting: " + android.car.Car.PERMISSION_CAR_DISPLAY_IN_CLUSTER);
 
-            requestPermissions(new String[] {android.car.Car.PERMISSION_CAR_DISPLAY_IN_CLUSTER},
+            requestPermissions(new String[]{android.car.Car.PERMISSION_CAR_DISPLAY_IN_CLUSTER},
                     DISPLAY_IN_CLUSTER_PERMISSION_REQUEST);
         } else {
             Log.i(TAG, "All required permissions granted");