Skip to content

Commit fa0e908

Browse files
leticiarossikendrickumstattd
authored andcommitted
[OverflowLinearLayout] Use button's text or content description as default menu item text.
PiperOrigin-RevId: 764857390
1 parent 2f79f31 commit fa0e908

File tree

2 files changed

+32
-8
lines changed

2 files changed

+32
-8
lines changed

lib/java/com/google/android/material/button/MaterialButtonGroup.java

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import android.os.Build.VERSION;
3232
import android.os.Build.VERSION_CODES;
3333
import androidx.appcompat.widget.PopupMenu;
34+
import android.text.TextUtils;
3435
import android.util.AttributeSet;
3536
import android.util.Log;
3637
import android.view.Gravity;
@@ -482,12 +483,7 @@ private MenuItem addMenuItemForButton(@NonNull Menu menu, @NonNull Button button
482483
}
483484
MaterialButtonGroup.LayoutParams lp =
484485
(MaterialButtonGroup.LayoutParams) button.getLayoutParams();
485-
String text = lp.overflowText;
486-
// Use button's text if overflow text is not specified or empty. We don't do this to icon, since
487-
// icon in menu item is optional.
488-
if (text == null || text.isEmpty()) {
489-
text = (String) button.getText();
490-
}
486+
String text = OverflowUtils.getMenuItemText(button, lp.overflowText);
491487
Drawable icon = lp.overflowIcon;
492488
MenuItem item = menu.add(text);
493489
if (icon != null) {
@@ -1201,4 +1197,29 @@ public LayoutParams(@NonNull MaterialButtonGroup.LayoutParams source) {
12011197
this.overflowIcon = source.overflowIcon;
12021198
}
12031199
}
1200+
1201+
/**
1202+
* Class for common logic between this MaterialButtonGroup and the OverflowLinearLayout
1203+
* overflow features.
1204+
*
1205+
* @hide
1206+
*/
1207+
@RestrictTo(LIBRARY_GROUP)
1208+
public static class OverflowUtils {
1209+
private OverflowUtils() {}
1210+
1211+
@Nullable
1212+
public static String getMenuItemText(@NonNull View view, @Nullable String text) {
1213+
if (!TextUtils.isEmpty(text)) {
1214+
return text;
1215+
}
1216+
if (view instanceof MaterialButton && !TextUtils.isEmpty(((MaterialButton) view).getText())) {
1217+
// Use button's text if overflow text is not specified or empty. We don't do this to icon,
1218+
// since icon in menu item is optional.
1219+
return (String) ((MaterialButton) view).getText();
1220+
}
1221+
// As a last resort, use content description.
1222+
return (String) view.getContentDescription();
1223+
}
1224+
}
12041225
}

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import androidx.annotation.NonNull;
4040
import androidx.annotation.Nullable;
4141
import com.google.android.material.button.MaterialButton;
42+
import com.google.android.material.button.MaterialButtonGroup.OverflowUtils;
4243
import com.google.android.material.internal.ThemeEnforcement;
4344
import com.google.android.material.resources.MaterialAttributes;
4445
import java.util.LinkedHashSet;
@@ -262,7 +263,9 @@ private void handleOverflowButtonClick(PopupMenu popupMenu, int overflowItemIcon
262263
for (View view : overflowViews) {
263264
OverflowLinearLayout.LayoutParams lp =
264265
(OverflowLinearLayout.LayoutParams) view.getLayoutParams();
265-
MenuItem item = popupMenu.getMenu().add(lp.overflowText);
266+
267+
String text = OverflowUtils.getMenuItemText(view, lp.overflowText);
268+
MenuItem item = popupMenu.getMenu().add(text);
266269
Drawable icon = lp.overflowIcon;
267270
if (icon != null) {
268271
item.setIcon(
@@ -272,8 +275,8 @@ private void handleOverflowButtonClick(PopupMenu popupMenu, int overflowItemIcon
272275
MaterialButton button = (MaterialButton) view;
273276
item.setCheckable(button.isCheckable());
274277
item.setChecked(button.isChecked());
275-
item.setEnabled(button.isEnabled());
276278
}
279+
item.setEnabled(view.isEnabled());
277280
item.setOnMenuItemClickListener(
278281
menuItem -> {
279282
view.performClick();

0 commit comments

Comments
 (0)