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;
}
}
+
}