Skip to content

Commit ef6e07d

Browse files
imhappipaulfthomas
authored andcommitted
[Catalog][OverflowLayout] Add tooltip to overflow button in Overflow Layout and update docked toolbar + floating toolbar demos to have tooltips
PiperOrigin-RevId: 776691798
1 parent 09e77fa commit ef6e07d

File tree

5 files changed

+33
-13
lines changed

5 files changed

+33
-13
lines changed

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

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import android.os.Bundle;
2323
import androidx.appcompat.app.AppCompatActivity;
2424
import androidx.appcompat.widget.Toolbar;
25+
import androidx.appcompat.widget.TooltipCompat;
2526
import android.view.LayoutInflater;
2627
import android.view.View;
2728
import android.view.ViewGroup;
@@ -52,14 +53,14 @@ public View onCreateDemoView(
5253
dockedToolbar = view.findViewById(R.id.docked_toolbar);
5354
((AppCompatActivity) requireActivity()).setSupportActionBar(toolbar);
5455

55-
setupSnackbarAndButtonParentOnClick(view.findViewById(R.id.docked_toolbar_left_arrow_button));
56-
setupSnackbarAndButtonParentOnClick(view.findViewById(R.id.docked_toolbar_right_arrow_button));
57-
setupSnackbarAndButtonParentOnClick(view.findViewById(R.id.docked_toolbar_add_button));
58-
setupSnackbarAndButtonParentOnClick(view.findViewById(R.id.docked_toolbar_tab_button));
59-
setupSnackbarAndButtonParentOnClick(view.findViewById(R.id.docked_toolbar_star_button));
60-
setupSnackbarAndButtonParentOnClick(view.findViewById(R.id.docked_toolbar_alarm_button));
61-
setupSnackbarAndButtonParentOnClick(view.findViewById(R.id.docked_toolbar_search_button));
62-
setupSnackbarAndButtonParentOnClick(view.findViewById(R.id.docked_toolbar_settings_button));
56+
setupSnackbarAndButtonParentOnClickAndTooltip(view.findViewById(R.id.docked_toolbar_left_arrow_button));
57+
setupSnackbarAndButtonParentOnClickAndTooltip(view.findViewById(R.id.docked_toolbar_right_arrow_button));
58+
setupSnackbarAndButtonParentOnClickAndTooltip(view.findViewById(R.id.docked_toolbar_add_button));
59+
setupSnackbarAndButtonParentOnClickAndTooltip(view.findViewById(R.id.docked_toolbar_tab_button));
60+
setupSnackbarAndButtonParentOnClickAndTooltip(view.findViewById(R.id.docked_toolbar_star_button));
61+
setupSnackbarAndButtonParentOnClickAndTooltip(view.findViewById(R.id.docked_toolbar_alarm_button));
62+
setupSnackbarAndButtonParentOnClickAndTooltip(view.findViewById(R.id.docked_toolbar_search_button));
63+
setupSnackbarAndButtonParentOnClickAndTooltip(view.findViewById(R.id.docked_toolbar_settings_button));
6364

6465
LinearLayout bodyContainer = view.findViewById(R.id.body_container);
6566

@@ -86,7 +87,7 @@ private void updateContentPaddingOnTalkback(View content, boolean talkbackEnable
8687
talkbackEnabled ? dockedToolbar.getMeasuredHeight() : 0));
8788
}
8889

89-
private void setupSnackbarAndButtonParentOnClick(View view) {
90+
private void setupSnackbarAndButtonParentOnClickAndTooltip(View view) {
9091
view.setOnClickListener(
9192
v ->
9293
Snackbar.make(
@@ -95,6 +96,7 @@ private void setupSnackbarAndButtonParentOnClick(View view) {
9596
Snackbar.LENGTH_SHORT)
9697
.setAnchorView(dockedToolbar)
9798
.show());
99+
TooltipCompat.setTooltipText(view, view.getContentDescription());
98100

99101
// Since each button is being wrapped by a FrameLayout, we set a click listener on each button's
100102
// parent so that any item that is in the overflow menu has its click action properly set up.

catalog/java/io/material/catalog/dockedtoolbar/DockedToolbarThreeItemDemoFragment.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import android.os.Bundle;
2121
import androidx.appcompat.app.AppCompatActivity;
2222
import androidx.appcompat.widget.Toolbar;
23+
import androidx.appcompat.widget.TooltipCompat;
2324
import android.view.LayoutInflater;
2425
import android.view.View;
2526
import android.view.ViewGroup;
@@ -53,14 +54,14 @@ public View onCreateDemoView(@NonNull LayoutInflater layoutInflater, @Nullable V
5354
Button leftArrowButton = content.findViewById(R.id.docked_toolbar_left_arrow_button);
5455
Button rightArrowButton = content.findViewById(R.id.docked_toolbar_right_arrow_button);
5556
Button addButton = content.findViewById(R.id.docked_toolbar_add_button);
56-
setupSnackbarOnClick(leftArrowButton);
57-
setupSnackbarOnClick(rightArrowButton);
58-
setupSnackbarOnClick(addButton);
57+
setupSnackbarOnClickAndTooltip(leftArrowButton);
58+
setupSnackbarOnClickAndTooltip(rightArrowButton);
59+
setupSnackbarOnClickAndTooltip(addButton);
5960

6061
return view;
6162
}
6263

63-
private void setupSnackbarOnClick(@NonNull View view) {
64+
private void setupSnackbarOnClickAndTooltip(@NonNull View view) {
6465
view.setOnClickListener(
6566
v ->
6667
Snackbar.make(
@@ -69,6 +70,7 @@ private void setupSnackbarOnClick(@NonNull View view) {
6970
Snackbar.LENGTH_SHORT)
7071
.setAnchorView(dockedToolbar)
7172
.show());
73+
TooltipCompat.setTooltipText(view, view.getContentDescription());
7274
}
7375

7476
@LayoutRes

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import android.os.Bundle;
2424
import androidx.appcompat.app.AppCompatActivity;
2525
import androidx.appcompat.widget.Toolbar;
26+
import androidx.appcompat.widget.TooltipCompat;
2627
import android.view.Gravity;
2728
import android.view.LayoutInflater;
2829
import android.view.View;
@@ -80,6 +81,7 @@ public View onCreateDemoView(
8081
}
8182
propagateCheckedButtonState(boldButtons, isChecked);
8283
});
84+
TooltipCompat.setTooltipText(boldButton, boldButton.getContentDescription());
8385
}
8486

8587
// Initialize group of italics format buttons.
@@ -100,6 +102,7 @@ public View onCreateDemoView(
100102
}
101103
propagateCheckedButtonState(italicButtons, isChecked);
102104
});
105+
TooltipCompat.setTooltipText(italicButton, italicButton.getContentDescription());
103106
}
104107

105108
// Initialize group of underline format buttons.
@@ -117,6 +120,7 @@ public View onCreateDemoView(
117120
}
118121
propagateCheckedButtonState(underlineButtons, isChecked);
119122
});
123+
TooltipCompat.setTooltipText(underlineButton, underlineButton.getContentDescription());
120124
}
121125

122126
// Initialize color text format buttons.
@@ -125,6 +129,7 @@ public View onCreateDemoView(
125129
colorTextButtons.addAll(initializeFormatButtons(floatingToolbars, R.id.floating_toolbar_vibrant_button_color_text));
126130
for (MaterialButton colorTextButton : colorTextButtons) {
127131
colorTextButton.setOnClickListener(v -> bodyText.setTextColor(getRandomColor()));
132+
TooltipCompat.setTooltipText(colorTextButton, colorTextButton.getContentDescription());
128133
}
129134

130135
// Initialize color fill format buttons.
@@ -133,6 +138,7 @@ public View onCreateDemoView(
133138
colorFillButtons.addAll(initializeFormatButtons(floatingToolbars, R.id.floating_toolbar_vibrant_button_color_fill));
134139
for (MaterialButton colorFillButton : colorFillButtons) {
135140
colorFillButton.setOnClickListener(v -> view.setBackgroundColor(getRandomColor()));
141+
TooltipCompat.setTooltipText(colorFillButton, colorFillButton.getContentDescription());
136142
}
137143

138144
// Initialize strikethrough format buttons.
@@ -150,6 +156,7 @@ public View onCreateDemoView(
150156
}
151157
propagateCheckedButtonState(strikethroughButtons, isChecked);
152158
});
159+
TooltipCompat.setTooltipText(strikethroughButton, strikethroughButton.getContentDescription());
153160
}
154161

155162
// Initialize left align format buttons.
@@ -158,6 +165,7 @@ public View onCreateDemoView(
158165
leftAlignButtons.addAll(initializeFormatButtons(floatingToolbars, R.id.floating_toolbar_vibrant_button_left_align));
159166
for (MaterialButton leftAlignButton : leftAlignButtons) {
160167
leftAlignButton.setOnClickListener(v -> bodyText.setGravity(Gravity.LEFT));
168+
TooltipCompat.setTooltipText(leftAlignButton, leftAlignButton.getContentDescription());
161169
}
162170

163171
// Initialize center align format buttons.
@@ -166,6 +174,7 @@ public View onCreateDemoView(
166174
centerAlignButtons.addAll(initializeFormatButtons(floatingToolbars, R.id.floating_toolbar_vibrant_button_center_align));
167175
for (MaterialButton centerButton : centerAlignButtons) {
168176
centerButton.setOnClickListener(v -> bodyText.setGravity(Gravity.CENTER_HORIZONTAL));
177+
TooltipCompat.setTooltipText(centerButton, centerButton.getContentDescription());
169178
}
170179

171180
// Initialize right align format buttons.
@@ -175,6 +184,7 @@ public View onCreateDemoView(
175184
for (MaterialButton rightAlignButton : rightAlignButtons) {
176185
// Check if is RTL since icon won't change direction.
177186
rightAlignButton.setOnClickListener(v -> bodyText.setGravity(Gravity.RIGHT));
187+
TooltipCompat.setTooltipText(rightAlignButton, rightAlignButton.getContentDescription());
178188
}
179189

180190
// Initialize orientation configuration selection controls.

lib/java/com/google/android/material/overflow/OverflowLinearLayout.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import android.os.Build.VERSION_CODES;
2929
import androidx.appcompat.widget.PopupMenu;
3030
import androidx.appcompat.widget.TintTypedArray;
31+
import androidx.appcompat.widget.TooltipCompat;
3132
import android.util.AttributeSet;
3233
import android.view.Gravity;
3334
import android.view.LayoutInflater;
@@ -98,6 +99,7 @@ public OverflowLinearLayout(
9899
(MaterialButton)
99100
LayoutInflater.from(context)
100101
.inflate(R.layout.m3_overflow_linear_layout_overflow_button, this, false);
102+
TooltipCompat.setTooltipText(overflowButton, getResources().getString(R.string.m3_overflow_linear_layout_button_tooltip_text));
101103
setOverflowButtonIcon(overflowButtonDrawable);
102104
if (overflowButton.getContentDescription() == null) {
103105
overflowButton.setContentDescription(

lib/java/com/google/android/material/overflow/res/values/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,8 @@
2020
description="Content description for the overflow button of the layout. [CHAR LIMIT=NONE]">
2121
Overflow menu
2222
</string>
23+
<string name="m3_overflow_linear_layout_button_tooltip_text"
24+
description="Text to show in tooltip for the overflow button on hover or long-press. [CHAR LIMIT=NONE]">
25+
More options
26+
</string>
2327
</resources>

0 commit comments

Comments
 (0)