Skip to content

Commit

Permalink
[MaterialDatePicker][a11y] Improve TalkBack focus order when selectin…
Browse files Browse the repository at this point in the history
…g a day

Make RecyclerView non-scrollable to allow focusing away from it instead of paginating to previous/next month.

PiperOrigin-RevId: 486936286
  • Loading branch information
paulfthomas authored and raajkumars committed Nov 9, 2022
1 parent 45a569f commit dff70c0
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
Expand Up @@ -245,9 +245,23 @@ public void onDayClick(long day) {
new PagerSnapHelper().attachToRecyclerView(recyclerView);
}
recyclerView.scrollToPosition(monthsPagerAdapter.getPosition(current));
setUpForAccessibility();
return root;
}

private void setUpForAccessibility() {
ViewCompat.setAccessibilityDelegate(
recyclerView,
new AccessibilityDelegateCompat() {
@Override
public void onInitializeAccessibilityNodeInfo(
View view, @NonNull AccessibilityNodeInfoCompat accessibilityNodeInfoCompat) {
super.onInitializeAccessibilityNodeInfo(view, accessibilityNodeInfoCompat);
accessibilityNodeInfoCompat.setScrollable(false);
}
});
}

@NonNull
private ItemDecoration createItemDecoration() {
return new ItemDecoration() {
Expand Down
Expand Up @@ -18,11 +18,15 @@
import static com.google.android.material.datepicker.MaterialDatePickerTestUtils.findFirstVisibleItem;
import static org.hamcrest.Matchers.lessThan;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;

import androidx.fragment.app.FragmentManager;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import androidx.arch.core.executor.testing.InstantTaskExecutorRule;
import androidx.core.view.ViewCompat;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import androidx.test.espresso.IdlingRegistry;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
Expand Down Expand Up @@ -128,4 +132,13 @@ public void changingSelectorToDayMaintainsCurrentMonth() {
MaterialDatePickerTestUtils.clickSelectorToggle();
assertEquals(findFirstVisibleItem(dialogFragment), OPEN_AT.monthsLater(1));
}

@Test
public void accessibility_daySelection_notScrollable() {
View view = dialogFragment.getView().findViewById(R.id.mtrl_calendar_months);
AccessibilityNodeInfoCompat nodeInfo = AccessibilityNodeInfoCompat.obtain();
ViewCompat.onInitializeAccessibilityNodeInfo(view, nodeInfo);

assertFalse(nodeInfo.isScrollable());
}
}

0 comments on commit dff70c0

Please sign in to comment.