Skip to content

Commit b085829

Browse files
imhappipaulfthomas
authored andcommitted
[Catalog] A11y fixes for floating and docked toolbar
PiperOrigin-RevId: 733788219
1 parent 2e97dd6 commit b085829

File tree

3 files changed

+44
-6
lines changed

3 files changed

+44
-6
lines changed

catalog/java/io/material/catalog/dockedtoolbar/DockedToolbarMainDemoFragment.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import androidx.annotation.NonNull;
3535
import androidx.annotation.Nullable;
3636
import androidx.coordinatorlayout.widget.CoordinatorLayout;
37+
import androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior;
3738
import com.google.android.material.dockedtoolbar.DockedToolbarLayout;
3839
import com.google.android.material.snackbar.Snackbar;
3940
import io.material.catalog.feature.DemoFragment;
@@ -42,6 +43,7 @@
4243
public class DockedToolbarMainDemoFragment extends DemoFragment {
4344

4445
private DockedToolbarLayout dockedToolbar;
46+
@Nullable private Behavior<View> behavior;
4547

4648
@NonNull
4749
@Override
@@ -53,6 +55,9 @@ public View onCreateDemoView(
5355
View view = layoutInflater.inflate(getLayoutResId(), viewGroup, /* attachToRoot= */ false);
5456
Toolbar toolbar = view.findViewById(R.id.toolbar);
5557
dockedToolbar = view.findViewById(R.id.docked_toolbar);
58+
behavior =
59+
(CoordinatorLayout.Behavior<View>)
60+
((CoordinatorLayout.LayoutParams) dockedToolbar.getLayoutParams()).getBehavior();
5661
((AppCompatActivity) requireActivity()).setSupportActionBar(toolbar);
5762

5863
Button leftArrowButton = view.findViewById(R.id.docked_toolbar_left_arrow_button);
@@ -72,16 +77,28 @@ public View onCreateDemoView(
7277

7378
if (VERSION.SDK_INT >= VERSION_CODES.M) {
7479
AccessibilityManager am = getContext().getSystemService(AccessibilityManager.class);
75-
if (am != null && am.isTouchExplorationEnabled()) {
76-
((CoordinatorLayout.LayoutParams) dockedToolbar.getLayoutParams()).setBehavior(null);
77-
dockedToolbar.post(
78-
() -> bodyContainer.setPadding(0, 0, 0, dockedToolbar.getMeasuredHeight()));
80+
if (am != null) {
81+
am.addTouchExplorationStateChangeListener(enabled -> updateScrollBehaviorWithTalkback(bodyContainer, enabled));
82+
if (am.isTouchExplorationEnabled()) {
83+
updateScrollBehaviorWithTalkback(bodyContainer, /* talkbackEnabled= */ true);
84+
}
7985
}
8086
}
8187

8288
return view;
8389
}
8490

91+
private void updateScrollBehaviorWithTalkback(View content, boolean talkbackEnabled) {
92+
((CoordinatorLayout.LayoutParams) dockedToolbar.getLayoutParams()).setBehavior(talkbackEnabled ? null : behavior);
93+
dockedToolbar.post(
94+
() ->
95+
content.setPadding(
96+
/* left= */ 0,
97+
/* top= */ 0,
98+
/* right= */ 0,
99+
talkbackEnabled ? dockedToolbar.getMeasuredHeight() : 0));
100+
}
101+
85102
private void showMenu(View v, @MenuRes int menuRes) {
86103
PopupMenu popup = new PopupMenu(getContext(), v);
87104
// Inflating the Popup using xml file

catalog/java/io/material/catalog/dockedtoolbar/res/layout/cat_docked_toolbar_fragment.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
android:layout_height="wrap_content"
5151
android:layout_margin="16dp"
5252
android:lineSpacingMultiplier="1.2"
53-
android:accessibilityTraversalAfter="@id/docked_toolbar"
5453
android:text="@string/cat_docked_toolbar_filler_text" />
5554

5655
</LinearLayout>
@@ -61,7 +60,6 @@
6160
android:layout_width="match_parent"
6261
android:layout_height="wrap_content"
6362
android:layout_gravity="bottom"
64-
android:accessibilityTraversalBefore="@id/body_text"
6563
app:layout_behavior="com.google.android.material.behavior.HideViewOnScrollBehavior">
6664

6765
<LinearLayout

catalog/java/io/material/catalog/floatingtoolbar/FloatingToolbarMainDemoFragment.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,23 @@
2020
import android.graphics.Color;
2121
import android.graphics.Paint;
2222
import android.graphics.Typeface;
23+
import android.os.Build.VERSION;
24+
import android.os.Build.VERSION_CODES;
2325
import android.os.Bundle;
2426
import androidx.appcompat.app.AppCompatActivity;
2527
import androidx.appcompat.widget.Toolbar;
2628
import android.view.LayoutInflater;
2729
import android.view.View;
2830
import android.view.ViewGroup;
31+
import android.view.accessibility.AccessibilityManager;
2932
import android.widget.TextView;
3033
import androidx.annotation.ColorInt;
3134
import androidx.annotation.IdRes;
3235
import androidx.annotation.LayoutRes;
3336
import androidx.annotation.NonNull;
3437
import androidx.annotation.Nullable;
38+
import androidx.coordinatorlayout.widget.CoordinatorLayout;
39+
import com.google.android.material.behavior.HideViewOnScrollBehavior;
3540
import com.google.android.material.button.MaterialButton;
3641
import com.google.android.material.floatingtoolbar.FloatingToolbarLayout;
3742
import io.material.catalog.feature.DemoFragment;
@@ -145,9 +150,27 @@ public View onCreateDemoView(
145150
// Select bottom configuration button to represent the toolbar that's initially visible.
146151
view.findViewById(R.id.bottom_button).performClick();
147152

153+
if (VERSION.SDK_INT >= VERSION_CODES.M) {
154+
AccessibilityManager am = getContext().getSystemService(AccessibilityManager.class);
155+
if (am != null) {
156+
am.addTouchExplorationStateChangeListener(enabled -> updateScrollBehaviorOnTalkback(floatingToolbars, enabled));
157+
if (am.isTouchExplorationEnabled()) {
158+
updateScrollBehaviorOnTalkback(floatingToolbars, /* talkbackEnabled= */ true);
159+
}
160+
}
161+
}
162+
148163
return view;
149164
}
150165

166+
private void updateScrollBehaviorOnTalkback(
167+
@NonNull List<FloatingToolbarLayout> floatingToolbars, boolean talkbackEnabled) {
168+
for (FloatingToolbarLayout floatingToolbar : floatingToolbars) {
169+
((CoordinatorLayout.LayoutParams) floatingToolbar.getLayoutParams())
170+
.setBehavior(talkbackEnabled ? null : new HideViewOnScrollBehavior<>());
171+
}
172+
}
173+
151174
private void initializeOrientationButton(
152175
@NonNull View view,
153176
@NonNull List<FloatingToolbarLayout> floatingToolbars,

0 commit comments

Comments
 (0)