Add Rerouting status to Cluster

Fix: 139752381
Test: Manual

Change-Id: I0bdc32f9c8dcc460dc93141c7ab0cbc0ca29c177
diff --git a/res/layout/include_navigation_state.xml b/res/layout/include_navigation_state.xml
index af04cf1..5cd6ff5 100644
--- a/res/layout/include_navigation_state.xml
+++ b/res/layout/include_navigation_state.xml
@@ -5,6 +5,7 @@
               android:orientation="horizontal">
 
     <LinearLayout
+        android:id="@+id/section_maneuver"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:orientation="vertical">
@@ -24,6 +25,21 @@
     </LinearLayout>
 
     <LinearLayout
+        android:id="@+id/section_service_status"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@+id/service_status"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="Rerouting..."
+            android:textSize="@dimen/distance_text_size"/>
+    </LinearLayout>
+
+    <LinearLayout
+        android:id="@+id/section_navigation"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical">
diff --git a/src/android/car/cluster/NavStateController.java b/src/android/car/cluster/NavStateController.java
index 7ac32ac..facab51 100644
--- a/src/android/car/cluster/NavStateController.java
+++ b/src/android/car/cluster/NavStateController.java
@@ -31,6 +31,7 @@
 import android.util.Log;
 import android.view.View;
 import android.widget.ImageView;
+import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import java.time.Instant;
@@ -43,6 +44,10 @@
 
     private Handler mHandler = new Handler();
 
+    private LinearLayout mSectionManeuver;
+    private LinearLayout mSectionNavigation;
+    private LinearLayout mSectionServiceStatus;
+
     private ImageView mManeuver;
     private ImageView mProvidedManeuver;
     private LaneView mLane;
@@ -61,6 +66,10 @@
      * @param container {@link View} containing the navigation state views
      */
     public NavStateController(View container) {
+        mSectionManeuver = container.findViewById(R.id.section_maneuver);
+        mSectionNavigation = container.findViewById(R.id.section_navigation);
+        mSectionServiceStatus = container.findViewById(R.id.section_service_status);
+
         mManeuver = container.findViewById(R.id.maneuver);
         mProvidedManeuver = container.findViewById(R.id.provided_maneuver);
         mLane = container.findViewById(R.id.lane);
@@ -84,8 +93,24 @@
         if (Log.isLoggable(TAG, Log.DEBUG)) {
             Log.d(TAG, "Updating nav state: " + state);
         }
-        Step step = state != null && state.getStepsCount() > 0 ? state.getSteps(0) : null;
-        Destination destination = state != null && state.getDestinationsCount() > 0
+
+        if (state == null) {
+            return;
+        }
+
+        if (state.getServiceStatus() == NavigationStateProto.ServiceStatus.REROUTING) {
+            mSectionManeuver.setVisibility(View.INVISIBLE);
+            mSectionNavigation.setVisibility(View.INVISIBLE);
+            mSectionServiceStatus.setVisibility(View.VISIBLE);
+            return;
+        } else {
+            mSectionManeuver.setVisibility(View.VISIBLE);
+            mSectionNavigation.setVisibility(View.VISIBLE);
+            mSectionServiceStatus.setVisibility(View.GONE);
+        }
+
+        Step step = state.getStepsCount() > 0 ? state.getSteps(0) : null;
+        Destination destination = state.getDestinationsCount() > 0
                 ? state.getDestinations(0) : null;
         Traffic traffic = destination != null ? destination.getTraffic() : null;
         String eta = destination != null
@@ -100,7 +125,7 @@
                 ? step.getManeuver().hasIcon() ? step.getManeuver().getIcon() : null
                 : null);
         mDistance.setText(formatDistance(step != null ? step.getDistance() : null));
-        mSegment.setText(state != null ? getSegmentString(state.getCurrentRoad()) : null);
+        mSegment.setText(getSegmentString(state.getCurrentRoad()));
         mCue.setCue(step != null ? step.getCue() : null, mImageResolver);
 
         if (step != null && step.getLanesCount() > 0) {