3535
3636import androidx .activity .OnBackPressedCallback ;
3737import androidx .activity .result .ActivityResult ;
38+ import androidx .annotation .DrawableRes ;
3839import androidx .annotation .IntDef ;
3940import androidx .annotation .MenuRes ;
4041import androidx .annotation .Nullable ;
5051import java .lang .annotation .RetentionPolicy ;
5152import java .text .NumberFormat ;
5253import java .util .ArrayList ;
54+ import java .util .HashMap ;
5355import java .util .Locale ;
5456
5557import de .dlyt .yanndroid .oneui .R ;
@@ -111,6 +113,7 @@ public interface OnMenuItemClickListener {
111113 private View overflowMenuPopupAnchor = null ;
112114 private PopupMenu overflowPopupMenu ;
113115 private Menu toolbarMenu ;
116+ private HashMap <MenuItem , Object > toolbarMenuButtons ;
114117 private OnMenuItemClickListener onToolbarMenuItemClickListener = item -> {
115118 };
116119
@@ -729,6 +732,7 @@ public void inflateToolbarMenu(@MenuRes int resId) {
729732 actionButtonContainer .removeAllViews ();
730733 overflowButton = null ;
731734
735+ toolbarMenuButtons = new HashMap <>();
732736 toolbarMenu = new MenuBuilder (getContext ());
733737 MenuInflater menuInflater = new SupportMenuInflater (getContext ());
734738 menuInflater .inflate (resId , toolbarMenu );
@@ -750,24 +754,25 @@ public void inflateToolbarMenu(@MenuRes int resId) {
750754 private void addActionButton (MenuItem item ) {
751755 if (actionButtonContainer .getChildCount () != 0 ) {
752756 for (int i = 0 ; i < actionButtonContainer .getChildCount (); i ++) {
753- ToolbarImageButton previousBtn = getOverflowIcon (i );
757+ ToolbarImageButton previousBtn = getOverflowButton (i );
754758 ViewGroup .LayoutParams lp = previousBtn .getLayoutParams ();
755759 lp .width = getResources ().getDimensionPixelSize (R .dimen .overflow_button_size );
756760 previousBtn .setPaddingRelative (getResources ().getDimensionPixelSize (R .dimen .sesl_action_button_padding_horizontal ), 0 , getResources ().getDimensionPixelSize (R .dimen .sesl_action_button_padding_horizontal ), 0 );
757761 }
758762 }
759763
760- ToolbarImageButton overflowButton = new ToolbarImageButton (mContext );
764+ ToolbarImageButton actionButton = new ToolbarImageButton (mContext );
761765
762766 ViewGroup .LayoutParams lp = new ViewGroup .LayoutParams (getResources ().getDimensionPixelSize (R .dimen .sesl_overflow_button_min_width ), getResources ().getDimensionPixelSize (R .dimen .sesl_action_bar_default_height ));
763767
764- overflowButton .setBackgroundResource (R .drawable .sesl_action_bar_item_background );
765- overflowButton .setImageDrawable (item .getIcon ());
766- overflowButton .setPaddingRelative (getResources ().getDimensionPixelSize (R .dimen .sesl_action_bar_overflow_padding_start ), 0 , getResources ().getDimensionPixelSize (R .dimen .sesl_action_bar_overflow_padding_end ), 0 );
767- overflowButton .setTooltipText (item .getTitle ());
768- overflowButton .setOnClickListener (v -> onToolbarMenuItemClickListener .onMenuItemClick (item ));
768+ actionButton .setBackgroundResource (R .drawable .sesl_action_bar_item_background );
769+ actionButton .setImageDrawable (item .getIcon ());
770+ actionButton .setPaddingRelative (getResources ().getDimensionPixelSize (R .dimen .sesl_action_bar_overflow_padding_start ), 0 , getResources ().getDimensionPixelSize (R .dimen .sesl_action_bar_overflow_padding_end ), 0 );
771+ actionButton .setTooltipText (item .getTitle ());
772+ actionButton .setOnClickListener (v -> onToolbarMenuItemClickListener .onMenuItemClick (item ));
769773
770- actionButtonContainer .addView (overflowButton , lp );
774+ toolbarMenuButtons .put (item , actionButton );
775+ actionButtonContainer .addView (actionButton , lp );
771776 }
772777
773778 private void setOverflowMenu (ArrayList <MenuItem > overflowItems ) {
@@ -781,7 +786,7 @@ private void setOverflowMenu(ArrayList<MenuItem> overflowItems) {
781786 if (overflowButton == null ) {
782787 if (actionButtonContainer .getChildCount () != 0 ) {
783788 for (int i = 0 ; i < actionButtonContainer .getChildCount (); i ++) {
784- ToolbarImageButton previousBtn = getOverflowIcon (i );
789+ ToolbarImageButton previousBtn = getOverflowButton (i );
785790 ViewGroup .LayoutParams lp = previousBtn .getLayoutParams ();
786791 lp .width = getResources ().getDimensionPixelSize (R .dimen .overflow_button_size );
787792 previousBtn .setPaddingRelative (getResources ().getDimensionPixelSize (R .dimen .sesl_action_button_padding_horizontal ), 0 , getResources ().getDimensionPixelSize (R .dimen .sesl_action_button_padding_horizontal ), 0 );
@@ -854,7 +859,7 @@ private void showOverflowMenuButtonBadge(int count) {
854859 }
855860 }
856861
857- private ToolbarImageButton getOverflowIcon (int index ) {
862+ private ToolbarImageButton getOverflowButton (int index ) {
858863 if (actionButtonContainer != null && actionButtonContainer .getChildCount () != 0 ) {
859864 return (ToolbarImageButton ) actionButtonContainer .getChildAt (index );
860865 } else {
@@ -863,6 +868,40 @@ private ToolbarImageButton getOverflowIcon(int index) {
863868 }
864869 }
865870
871+ public void setToolbarMenuItemIcon (MenuItem item , Drawable drawable ) {
872+ if (toolbarMenuButtons .containsKey (item )) {
873+ ((ToolbarImageButton ) toolbarMenuButtons .get (item )).setImageDrawable (drawable );
874+ }
875+ }
876+
877+ public void setToolbarMenuItemIcon (MenuItem item , @ DrawableRes int resId ) {
878+ if (toolbarMenuButtons .containsKey (item )) {
879+ ((ToolbarImageButton ) toolbarMenuButtons .get (item )).setImageResource (resId );
880+ }
881+ }
882+
883+ public void setToolbarMenuItemTitle (MenuItem item , CharSequence title ) {
884+ if (toolbarMenuButtons .containsKey (item )) {
885+ ((ToolbarImageButton ) toolbarMenuButtons .get (item )).setTooltipText (title );
886+ } else {
887+ overflowPopupMenu .setMenuItemTitle (item , title );
888+ }
889+ }
890+
891+ public void setToolbarMenuItemVisibility (MenuItem item , boolean visible ) {
892+ if (toolbarMenuButtons .containsKey (item )) {
893+ ((ToolbarImageButton ) toolbarMenuButtons .get (item )).setVisibility (visible ? VISIBLE : GONE );
894+ }
895+ }
896+
897+ public void setToolbarMenuItemEnabled (MenuItem item , boolean enabled ) {
898+ if (toolbarMenuButtons .containsKey (item )) {
899+ ((ToolbarImageButton ) toolbarMenuButtons .get (item )).setEnabled (enabled );
900+ } else {
901+ overflowPopupMenu .setMenuItemEnabled (item , enabled );
902+ }
903+ }
904+
866905 //
867906 // others
868907 //
0 commit comments