implement piet a11y header label

PiperOrigin-RevId: 244222945
Change-Id: I29c0255e7941ec284d33a9f2cbc902f8a4fd5094
diff --git a/src/main/java/com/google/android/libraries/feed/piet/ElementAdapter.java b/src/main/java/com/google/android/libraries/feed/piet/ElementAdapter.java
index 7744330..75532f2 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/ElementAdapter.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/ElementAdapter.java
@@ -18,14 +18,17 @@
 import static com.google.android.libraries.feed.piet.StyleProvider.DIMENSION_NOT_SET;
 
 import android.content.Context;
+import android.os.Build;
 import android.support.annotation.VisibleForTesting;
 import android.view.View;
 import android.view.ViewGroup.LayoutParams;
+import android.view.accessibility.AccessibilityNodeInfo;
 import android.widget.FrameLayout;
 import com.google.android.libraries.feed.common.logging.Logger;
 import com.google.android.libraries.feed.piet.DebugLogger.MessageType;
 import com.google.android.libraries.feed.piet.ui.RoundedCornerWrapperView;
 import com.google.search.now.ui.piet.AccessibilityProto.Accessibility;
+import com.google.search.now.ui.piet.AccessibilityProto.AccessibilityRole;
 import com.google.search.now.ui.piet.ActionsProto.Actions;
 import com.google.search.now.ui.piet.ActionsProto.VisibilityAction;
 import com.google.search.now.ui.piet.ElementsProto.BindingValue;
@@ -156,7 +159,6 @@
     initializeOverflow(baseElement);
 
     elementStyle.applyElementStyles(this);
-
     created = true;
   }
 
@@ -250,6 +252,42 @@
     if (getElementStyleIdsStack().hasStyleBinding()) {
       elementStyle.applyElementStyles(this);
     }
+    for (AccessibilityRole role : baseElement.getAccessibility().getRolesList()) {
+      switch (role) {
+        case HEADER:
+          getBaseView().setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
+          getBaseView().setFocusable(true);
+          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+            getBaseView()
+                .setAccessibilityDelegate(
+                    new View.AccessibilityDelegate() {
+                      @Override
+                      public void onInitializeAccessibilityNodeInfo(
+                          View host, AccessibilityNodeInfo info) {
+                        super.onInitializeAccessibilityNodeInfo(host, info);
+                        info.setHeading(true);
+                      }
+                    });
+          } else {
+            getBaseView()
+                .setAccessibilityDelegate(
+                    new View.AccessibilityDelegate() {
+                      @Override
+                      public void onInitializeAccessibilityNodeInfo(
+                          View host, AccessibilityNodeInfo info) {
+                        super.onInitializeAccessibilityNodeInfo(host, info);
+                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+                          info.setCollectionItemInfo(
+                              AccessibilityNodeInfo.CollectionItemInfo.obtain(-1, 0, 0, 0, true));
+                        }
+                      }
+                    });
+          }
+          break;
+        default:
+          // Do nothing
+      }
+    }
 
     getBaseView()
         .setContentDescription(
diff --git a/src/test/java/com/google/android/libraries/feed/piet/ElementAdapterTest.java b/src/test/java/com/google/android/libraries/feed/piet/ElementAdapterTest.java
index 96cde7d..ab2c902 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/ElementAdapterTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/ElementAdapterTest.java
@@ -35,6 +35,7 @@
 import android.view.ViewGroup;
 import android.view.ViewGroup.LayoutParams;
 import android.view.ViewGroup.MarginLayoutParams;
+import android.view.accessibility.AccessibilityNodeInfo;
 import android.widget.FrameLayout;
 import com.google.android.libraries.feed.common.functional.Suppliers;
 import com.google.android.libraries.feed.common.time.testing.FakeClock;
@@ -46,6 +47,7 @@
 import com.google.android.libraries.feed.piet.ui.RoundedCornerWrapperView;
 import com.google.android.libraries.feed.testing.shadows.ExtendedShadowView;
 import com.google.search.now.ui.piet.AccessibilityProto.Accessibility;
+import com.google.search.now.ui.piet.AccessibilityProto.AccessibilityRole;
 import com.google.search.now.ui.piet.ActionsProto.Action;
 import com.google.search.now.ui.piet.ActionsProto.Actions;
 import com.google.search.now.ui.piet.ActionsProto.VisibilityAction;
@@ -777,12 +779,15 @@
         Element.newBuilder()
             .setAccessibility(
                 Accessibility.newBuilder()
+                    .addRoles(AccessibilityRole.HEADER)
                     .setDescription(ParameterizedText.newBuilder().setText("Accessible!")))
             .build();
 
     adapter.bindModel(accessibilityElement, frameContext);
-
     assertThat(adapter.getView().getContentDescription().toString()).isEqualTo("Accessible!");
+    final AccessibilityNodeInfo nodeInfo = AccessibilityNodeInfo.obtain();
+    adapter.getView().onInitializeAccessibilityNodeInfo(nodeInfo);
+    assertThat(nodeInfo.getCollectionItemInfo().isHeading()).isTrue();
   }
 
   @Test
@@ -1410,4 +1415,5 @@
       heightPx = height;
     }
   }
+
 }